package com.ht.modules.device.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ht.modules.device.entity.DeviceInfo;
import com.ht.modules.device.entity.DeviceInfoVo;
import com.ht.modules.device.mapper.DeviceInfoMapper;
import com.ht.modules.device.service.IDeviceInfoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 *  设备信息
 * 
 */
@Slf4j
@Service
public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceInfo> implements IDeviceInfoService {

    @Autowired
    private DeviceInfoMapper deviceInfoMapper;

    /**
     * 分页列表查询
     *
     * @param deviceInfoVo 参数
     * @param page         分页对象
     * @param column       默认排序列
     * @param order        默认排序方式
     * @return 分页列表
     */
    @Override
    public Page<DeviceInfoVo> list(Page<DeviceInfoVo> page, DeviceInfoVo deviceInfoVo, String column, String order) {
        List<DeviceInfoVo> deviceInfoVos = deviceInfoMapper.list(page, deviceInfoVo, column, order);
        return page.setRecords(deviceInfoVos);
    }

    /**
     * 不分页列表查询
     *
     * @param deviceInfoVo 参数
     * @param column       默认排序列
     * @param order        默认排序方式
     * @return 不分页列表
     */
    @Override
    public List<DeviceInfoVo> listNoPage(DeviceInfoVo deviceInfoVo, String column, String order) {
        List<DeviceInfoVo> deviceInfoVos = deviceInfoMapper.list(null, deviceInfoVo, column, order);
        return deviceInfoVos;
    }

    /**
     * 添加
     *
     * @param deviceInfo 参数
     */
    @Override
    public void add(DeviceInfo deviceInfo) {
        // 校验设备IP不能为空
        if (Strings.isBlank(deviceInfo.getIp())) {
            throw new RuntimeException("设备IP不能为空！");
        }
        // 校验设备名称不能为空
        if (Strings.isBlank(deviceInfo.getDeviceName())) {
            throw new RuntimeException("设备名称不能为空！");
        }
        // 校验设备类型不能为空
        if (Strings.isBlank(deviceInfo.getDeviceType())) {
            throw new RuntimeException("设备类型不能为空！");
        }
        // 校验设备位置不能为空
        if (Strings.isBlank(deviceInfo.getDeviceAddress())) {
            throw new RuntimeException("设备位置不能为空！");
        }
        // 校验设备存贮器地址不能为空
        if (Strings.isBlank(deviceInfo.getRegisterAddress())) {
            throw new RuntimeException("设备存贮器地址不能为空！");
        }
        // 校验读取寄存器数量不能为空，且>0
        if (null == deviceInfo.getReadRegisterCount() || deviceInfo.getReadRegisterCount() <= 0) {
            throw new RuntimeException("读取寄存器数量不能为空，且>0！");
        }
        // 校验系数不能为空
        if (null == deviceInfo.getCoefficient()) {
            throw new RuntimeException("系数不能为空");
        }

        this.save(deviceInfo);
    }

    /**
     * 编辑
     *
     * @param deviceInfo 参数
     */
    @Override
    public void edit(DeviceInfo deviceInfo) {
        DeviceInfo deviceInfoEntity = this.getById(deviceInfo.getId());
        if (null == deviceInfoEntity) {
            throw new RuntimeException("未找到对应实体！");
        }
        // 校验设备IP不能为空
        if (Strings.isBlank(deviceInfo.getIp())) {
            throw new RuntimeException("设备IP不能为空！");
        }
        // 校验设备名称不能为空
        if (Strings.isBlank(deviceInfo.getDeviceName())) {
            throw new RuntimeException("设备名称不能为空！");
        }
        // 校验设备类型不能为空
        if (Strings.isBlank(deviceInfo.getDeviceType())) {
            throw new RuntimeException("设备类型不能为空！");
        }
        // 校验设备位置不能为空
        if (Strings.isBlank(deviceInfo.getDeviceAddress())) {
            throw new RuntimeException("设备位置不能为空！");
        }
        // 校验设备存贮器地址不能为空
        if (Strings.isBlank(deviceInfo.getRegisterAddress())) {
            throw new RuntimeException("设备存贮器地址不能为空！");
        }
        // 校验读取寄存器数量不能为空，且>0
        if (null == deviceInfo.getReadRegisterCount() || deviceInfo.getReadRegisterCount() <= 0) {
            throw new RuntimeException("读取寄存器数量不能为空，且>0！");
        }
        // 校验系数不能为空
        if (null == deviceInfo.getCoefficient()) {
            throw new RuntimeException("系数不能为空");
        }

        this.updateById(deviceInfo);
    }

    /**
     * 通过id删除（逻辑删除）
     *
     * @param id 参数
     */
    @Override
    public void delete(Integer id) {
        DeviceInfo deviceInfo = this.getById(id);
        if (null == deviceInfo) {
            throw new RuntimeException("未找到对应实体！");
        }
        this.updateById(deviceInfo);
    }

    /**
     * 批量删除（逻辑删除）
     *
     * @param ids 参数
     */
    @Override
    public void deleteBatch(String ids) {
        if (Strings.isBlank(ids)) {
            throw new RuntimeException("参数不识别！");
        }
    }

    /**
     * 通过id查询
     *
     * @param id 参数
     * @return 查询结果
     */
    @Override
    public DeviceInfo queryById(Integer id) {
        DeviceInfo deviceInfo = this.getById(id);
        if (null == deviceInfo) {
            throw new RuntimeException("未找到对应实体！");
        }
        return deviceInfo;
    }

    /**
     * 通过id查询Vo
     *
     * @param id 参数
     * @return 查询结果
     */
    @Override
    public DeviceInfoVo queryVoById(Integer id) {
        DeviceInfoVo deviceInfoVo = deviceInfoMapper.getVoById(id);
        if (null == deviceInfoVo) {
            throw new RuntimeException("未找到对应实体！");
        }
        return deviceInfoVo;
    }
}
